In a system-on-chip (SoC) design, hardware coherency is an important factor. In an SoC that includes multiple caching elements, it is necessary to snoop the multiple caching elements in a coherent domain to ensure hardware coherency. Snooping caches can add latency to access and consume additional power. Thus, it is important to keep snooping as efficient as possible when designing an SoC.
One of the common design techniques to minimize snooping is using a snoop filter table (SFT). A snoop filter is a type of logic to track the presence of a block of memory (e.g., a cache line) in caches in a coherent domain. The snoop filter can determine whether snooping of a given cache is required and can filter out unnecessary snooping. The snoop filter can efficiently reduce snooping of caches.
A snoop filter determines a filtering decision, and thus consumes power in the process. Power consumption required for the snoop filter can be a significant component of total dynamic power in a coherent system interconnect design. The snoop filter can further add latency to a coherent request to make the filtering decision for snooping.
A snoop filter tracks the presence of a block of memory in the caches by maintaining a cache of memory blocks referred to as a snoop filter cache that is cached in the coherent domain. The snoop filter cache is commonly organized as an n-way associative cache (i.e., k indexes and n-way per index). Each way requires state information and address tag information. The state information indicates whether the way is tracking any valid cached memory block (valid entry) and if so its location that caches in the system. The address tag information is used to determine an address tag match whether the SFT-tracked memory block is the same as the memory block being requested. The state information and the address tag information are typically stored together in a common array.
Further, a conventional snoop filter design requires a look up of both state and address tag information for all n-way for a given index for every coherent request to determine whether snoop is required. If snooping is required, the snoop filter further determines the caches that need to be snooped. Looking up both the state information and the address tag information for all n-ways for a given index can take time and consume more power. The efficiency of the look up in a snooping process is particularly important when the snoop filter result is a cache miss (i.e., no cache has the requested memory block), or numerous ways of n-way are not valid or contains valid entry but not of the same memory block.